/**
 * 即插件的 application.xxx，会自动加载，即便在插件的 jar 包里
 * 比 app 的 application.xxx 晚加载，合并到 app 的配置中，并且 app 配置优先
 * 同时，因为加载时机要晚，所以在 app 的 application.groovy 里无法读取 plugin.xxx 中的默认配置
 */

// hibernate.、dataSource. 的配置，不允许配置在 plugin.xxx 中，AbstractGrailsPlugin 里会自动过滤
//
//hibernate.cache.queries = true          // false
//hibernate.cache.use_query_cache = true  // false
//hibernate.cache.use_second_level_cache = true
//hibernate.cache.region.factory_class = "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"
//
//dataSource.poold = true
//dataSource.jmxExport = true
//dataSource.driverClassName = "org.h2.Driver"
//dataSource.username = "sa"
//dataSource.password = ""
//
//下面这些属性，只能配置在 applicaiton.xx 中，Map、闭包、单行等几种配置方式都试过了，会被自动清空（null）
//dataSource.dbCreate = "update"
//dataSource.url = "jdbc:h2:./devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
//dataSource.properties = [
//		jmxEnabled: false,
//		minIdle: 5
//]

/*// Log4j 日志配置
// 实际上已经不起作用了，但是可以避免一些有 @Log4j 注解的类（如SassProcessor）加载时后台报警 --- 没用：（
log4j.default = {
	appenders {
		console name: "stdout", layout: pattern(conversionPattern: '%d{HH:mm:ss,SSS} [%t] [%p %c] - %m%n')
	}
	root {
		error 'stdout'
		additivity = true
	}
	info 'asset.pipeline.jsass.SassProcessor'
}*/

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

grails.spring.transactionManagement.proxies = false

// 这几个配置，applicaiton.xx 中删掉也没关系：cfg.info 打印全部都是正确的
//info.app.name = "@info.app.name@"
//info.app.version = "@info.app.version@"
//info.app.grailsVersion = "@info.app.grailsVersion@"

spring.groovy.template."check-template-location" = false

grails.mime.disable.accept.header.userAgents = ["Gecko", "WebKit", "Presto", "Trident"]
grails.mime.types = [
		// the first one is the default format
		all          : "*/*", // "all" maps to "*" or the first available format in withFormat
		atom         : "application/atom+xml",
		css          : "text/css",
		csv          : "text/csv",
		form         : "application/x-www-form-urlencoded",
		html         : ["text/html", "application/xhtml+xml"],
		js           : "text/javascript",
		json         : ["application/json", "text/json"],
		multipartForm: "multipart/form-data",
		pdf          : "application/pdf",
		rss          : "application/rss+xml",
		text         : "text/plain",
		hal          : ["application/hal+json", "application/hal+xml"],
		xml          : ["text/xml", "application/xml"]
]
grails.urlmapping.cache.maxsize = 1000
grails.controllers.defaultScope = "singleton"
grails.converters.encoding = "UTF-8"
grails.views.default.codec = "none"    // default "html"
grails.views.gsp.encoding = "UTF-8"
grails.views.gsp.htmlcodec = "xml"     // use xml escaping instead of HTML4 escaping
grails.views.gsp.codecs = [
		expression : "none", // escapes values inside ${}, default "html"
		scriptlets : "none", // escapes output from scriptlets in GSPs，default "html"
		taglib     : "none", // escapes output from taglibs
		staticparts: "none", // escapes output from static template parts
]
// 关于 codec，参考：
// https://github.com/grails/grails-core/wiki/Default-Codecs

endpoints.jmx."unique-names" = true

// 允许 gsp 热加载
// 需要热加载的 gsp 文件应放在 /WEB-INF/grails-app/views 下
grails.gsp.enable.reload = true

// 设置 gsp 编译后的文件存储位置：详见《GSP Debugging》
if (grails.util.Environment.isDevelopmentMode()) {
	File dir = new File("build/views")
	if (dir.exists() || dir.mkdirs()) {
		grails.views.gsp.keepgenerateddir = dir.canonicalPath
	}
}

// 附件、请求大小，默认都是 128000
// @see org.grails.plugins.web.controllers.ControllersGrailsPlugin
grails.controllers.upload.maxFileSize = 128000L * 1000 * 10
grails.controllers.upload.maxRequestSize = 128000L * 1000

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/** 设置 GROM 中实体的默认约束 */
grails.gorm.default.constraints = {
	'*'(nullable: true, scale: 2) // 不能加 maxSize: 255，会导致所有 Set、List 受限
}

/** 始终启用数据库控制台 */
grails.dbconsole.enabled = true

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/** 插件 console */
// 始终启用，并禁止访问远程文件
grails.plugin.console.enabled = true
grails.plugin.console.fileStore.remote.enabled = false

/** 插件 ueditor */
grails.ueditor.config = "/assets/ueditor/config.js"

/** 插件 ckeditor */
ckeditor {
	// 配置文件
	config = "/assets/ckeditor/config.js"
	upload {
		/**
		 * 文件上载文件夹的绝对路径：
		 * 在 BroFramework 的 BootStrap 里根据 Setting 重新赋值
		 */
		basedir = ""
		/**
		 *  文件访问的路径：
		 *  	在 BroFramework 的 BootStrap 里根据 Setting 重新赋值；
		 *  	这个路径在使用时会随资源(如图片)路径一起写到数据库里面去。
		 *  处理方法1：
		 * 		Linux：创建文件系统链接（ln -s）到webapps/ROOT/static，在Linux/Unix设置tomcat的allowLinking（开发环境设置tomcat plugin的_Events）
		 * 		Windows：用linkd，链接到webapps/ROOT/static/ckeditor即可，无须更多设置
		 *  处理方法2（推荐）：
		 *  	前端安装Apache HTTP Server，采用 mod_proxy 或 mod_jk 绑定Tomcat到80端口
		 * 		映射虚拟目录：/static/
		 *  开发环境：
		 *  	在 BroFramework 的 BootStrap 里根据环境变量重新赋值为 /context/attachment/downloadStatic?name=
		 */
		baseurl = ""
		/**
		 * 在Config中设置 ckeditor.upload.baseurl_absolute = false，则basedir、baseurl都相对于当前应用；
		 * 安装 BroFramework 插件后，BootStrap 中将其始终设为 true；
		 * 建议：前端配置HTTP Server，本参数设为true，将basedir放在应用外。
		 * 注意：本参数需 hack 官方 ckeditor 插件！
		 */
		baseurl_absolute = true
		//
		overwrite = false
		link {
			browser = true
			upload = true
			allowed = []
			denied = ['html', 'htm', 'php', 'php2', 'php3', 'php4', 'php5',
					  'phtml', 'pwml', 'inc', 'asp', 'aspx', 'ascx', 'jsp',
					  'cfm', 'cfc', 'pl', 'bat', 'com', 'dll', 'vbs', 'js', 'reg',
					  'cgi', 'htaccess', 'asis', 'sh', 'shtml', 'shtm', 'phtm']
		}
		image {
			browser = true
			upload = true
			allowed = ['jpg', 'gif', 'jpeg', 'png']
			denied = []
		}
		flash {
			browser = true
			upload = true
			allowed = ['swf']
			denied = []
		}
	}
}

/** 插件 routing */
grails.routing.trace = true
grails.routing.useMDCLogging = true

/** 插件 mail */
/*/ 是否启用邮件调试（后台会输出完整的 SMTP 日志），测试代码如：
ctx.mailSender.session.setDebug(true)
config.merge("grails.mail.overrideAddress": null)
config.merge("grails.mail.disabled": false)
ctx.mailService.sendMail{
	to "abcd@bropen.com.cn"
	subject "test"
	body "test body"
}
*/
grails.mail.debug = false
// 其他配置（如socks5代理、启用ssl等），可参考
// https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html
/*grails.mail.props = [
		// @javax.mail.Session
		// 还需要 setDebugOut，否则无效（@see MailGrailsPlugin）：
		"mail.debug"     : true,   // 打印日志：ctx.mailService.mailMessageBuilderFactory.mailSender.session.setDebugOut( System.out ) + session.setDebug( true )
		// @com.sun.mail.smtp.SMTPTransport
		"mail.smtp.auth" : true,   // 匿名邮件发送服务器：ctx.mailService.mailMessageBuilderFactory.mailSender.session.getProperties().setProperty("mail.smtp.auth", "false")
		"mail.debug.auth": true    // 还需要设置一个不兼容的 loglevel，暂不研究，上面的 mail.debug 够用
		// @org.springframework.mail.javamail.JavaMailSenderImpl ...
]*/

/** 插件 asynchronous-mail */
asynchronous.mail.disable = true // 默认禁用

/**
 * p6spy-ui 插件
 *
 * 如果只是希望找到执行时间比较长的 sql 以及调用的地方，可以配置 executionThreshold、outagedetection，并打开 stacktrace；
 * 如果只是希望找到执行次数比较多或时间交长的 sql，可以配置 executionThreshold 为 0，并且关闭 stacktrace；
 * 这样日志文件读或者解析起来相对方便。
 *
 * 官网：https://github.com/p6spy/p6spy
 * 不是所有配置都可以用，得看 p6spy-ui 的实现。
 */
grails.plugin.p6spy.config.modulelist = "com.p6spy.engine.spy.P6SpyFactory,com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory"
grails.plugin.p6spy.config.outagedetection = true
grails.plugin.p6spy.config.outagedetectioninterval = 10 // s
grails.plugin.p6spy.config.executionThreshold = 2000    // ms
grails.plugin.p6spy.config.databaseDialectDateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
grails.plugin.p6spy.config.appender = "com.p6spy.engine.spy.appender.DailyFileLogger"
grails.plugin.p6spy.config.logfile = System.getProperty("log.file.out").replace("_out.log", "_p6spy.log")
grails.plugin.p6spy.config.dateformat = "yyyy-MM-dd HH:mm:ss.SSS"
grails.plugin.p6spy.config.stacktrace = true
//grails.plugin.p6spy.config.stacktraceclass = "bropen."
//grails.plugin.p6spy.config.excludecategories = 'batch,result,resultset'  // - debug,info
environments {
	grails.plugin.p6spy.disabled = false
	production {
		grails.plugin.p6spy.disabled = true
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/** 升级器表名 */
bropen.toolkit.updater.table = "o_update_log"

/** 是否是 tomcat 集群，是则在 web.xml 中生成 distributable 标签 */
bropen.toolkit.cluster.tomcat.enabled = true

/** 是否启用 EhCache 的集群同步：仅限war包部署方式 */
bropen.toolkit.cluster.ehcache.enabled = grails.util.Environment.isWarDeployed()
bropen.toolkit.cluster.ehcache.multicast.port = null // 自动计算

/** 是否启用 CometD 的 Oort 集群 */
//默认为false，但是在FWK中默认为真，所以这里注释掉
//bropen.toolkit.cluster.cometd.enabled = false
bropen.toolkit.cluster.cometd.server.port = 8080    // 应用的默认端口（如果是水平集群，可以通过这里进行简单设置，否则从下面的配置文件中加载，包括主机名）
bropen.toolkit.cluster.cometd.multicast.port = null // 自动计算

/**
 * 默认的集群配置文件(UTF-8)，里面包括：
 * 1、当前JVM绑定的地址：server.host，默认当前主机名对应的IP
 * 2、当前JVM绑定的端口：server.port，默认8080
 * 3、ehcache组播端口：ehcache.multicast.port[.AppName]，默认自动计算，手动的话，集群各节点配置要一致，且多个应用之间不能冲突
 * 4、cometd组播端口：cometd.multicast.port[.AppName]，默认自动计算，手动的话，集群各节点配置要一致，且多个应用之间不能冲突
 */
bropen.toolkit.cluster.config.file = System.getProperty("user.dir") + File.separator + "bropen" + File.separator + "clusters.properties"

/**
 * 系统支持的i18n语言：
 * 如果客户端语言不在列表中，则取 message api 的 default 参数、或列表中的第一个语言定义
 */
bropen.toolkit.i18n.supported = ["zh_CN"] // ["zh_CN", "en_US"]
/**
 * 语言不在上面列表中时的映射关系，示例：
 * 1、["zh_CN": ["zh*"]] 表示所有 zh 为前缀的语种都映射到 zh_CN，而其他语言则采用默认语言（supported 里的第一个）；
 * 2、["zh_CN": ["zh*"], "en_US":["*"]] 表示非 zh 前缀的语言都映射到 en_US 上。
 */
bropen.toolkit.i18n.mapping = [:] // ["zh_CN": ["zh*"], "en_US": ["*"]]

/**
 * 是否在所有外键上创建索引（Oracle 下利大于弊），需要修改 AbstractGrailsDomainBinder
 * @see http://blog.csdn.net/saintlu/article/details/7318456	Oracle外键列上是否需要索引
 * @see http://www.soft6.com/v9/2009/jcsj_0218/95805.html		Oracle子表外键需不需要索引
 */
bropen.toolkit.gorm.foreignkey.index.all = false

/**
 * 从外部 application.properties 文件中加载配置，并覆盖 application.yml/groovy 中的配置，仅对当前 jvm 有效
 */
bropen.toolkit.application.properties = System.getProperty("user.dir") + File.separator + "bropen" + File.separator + "application.properties"

